草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

linux - 每个进程是否存在内核堆栈?

每个用户空间进程是否存在内核堆栈和用户空间堆栈?如果两个堆栈都存在,那么每个用户空间进程应该有2个堆栈指针,对吗? 最佳答案 在Linux中,每个任务(用户空间或内核线程)都有一个8kb或4kb的内核堆栈,具体取决于内核配置。确实有单独的堆栈指针,但是,在任何给定时间,CPU中只有一个;如果用户空间代码正在运行,用于异常或中断的内核堆栈指针由任务状态段指定,如果内核代码正在运行,则用户堆栈指针保存在位于内核堆栈的上下文结构中。 关于linux-每个进程是否存在内核堆栈?,我们在Stack

linux - 每个进程是否存在内核堆栈?

每个用户空间进程是否存在内核堆栈和用户空间堆栈?如果两个堆栈都存在,那么每个用户空间进程应该有2个堆栈指针,对吗? 最佳答案 在Linux中,每个任务(用户空间或内核线程)都有一个8kb或4kb的内核堆栈,具体取决于内核配置。确实有单独的堆栈指针,但是,在任何给定时间,CPU中只有一个;如果用户空间代码正在运行,用于异常或中断的内核堆栈指针由任务状态段指定,如果内核代码正在运行,则用户堆栈指针保存在位于内核堆栈的上下文结构中。 关于linux-每个进程是否存在内核堆栈?,我们在Stack

linux - 在 Unix 系统上自动获取堆栈跟踪

在Unix系统上有哪些自动获取堆栈跟踪的方法?我的意思不是仅仅获取核心文件或与GDB交互附加,而是拥有一个SIGSEGV处理程序将回溯转储到文本文件。以下可选功能的奖励积分:在崩溃时收集额外信息(例如配置文件)。通过电子邮件将崩溃信息包发送给开发人员。能够将其添加到dlopened共享库中不需要GUI 最佳答案 仅供引用,建议的解决方案(在信号处理程序中使用backtrace_symbols)有被破坏的危险。不要使用它-是的,backtrace和backtrace_symbols会生成回溯并将其转换为符号名称,但是:backtrac

linux - 在 Unix 系统上自动获取堆栈跟踪

在Unix系统上有哪些自动获取堆栈跟踪的方法?我的意思不是仅仅获取核心文件或与GDB交互附加,而是拥有一个SIGSEGV处理程序将回溯转储到文本文件。以下可选功能的奖励积分:在崩溃时收集额外信息(例如配置文件)。通过电子邮件将崩溃信息包发送给开发人员。能够将其添加到dlopened共享库中不需要GUI 最佳答案 仅供引用,建议的解决方案(在信号处理程序中使用backtrace_symbols)有被破坏的危险。不要使用它-是的,backtrace和backtrace_symbols会生成回溯并将其转换为符号名称,但是:backtrac

c++ - 在 GCC 上的 GTEST 中测试失败时是否有打印堆栈跟踪的选项?

我在Linux上将GTEST与GCC结合使用。我想看到在测试失败时打印的堆栈跟踪(无论是断言还是基于信号的崩溃)。可以做到manually,但我想知道它是否可以设置为GTEST构建/运行选项(无需对我的代码库进行多行修改)? 最佳答案 没有“完全”记录的选项:--gtest_stack_trace_depth=10(10只是示例值)。必须与--gmock_verbose=info一起使用是的-它适用于失败的EXPECT_CALL-仅在gmock中。对于断言(如ASSERT_EQ),它的意义不大-因为ASSERT就在它所在的位置-它的

c++ - 在 GCC 上的 GTEST 中测试失败时是否有打印堆栈跟踪的选项?

我在Linux上将GTEST与GCC结合使用。我想看到在测试失败时打印的堆栈跟踪(无论是断言还是基于信号的崩溃)。可以做到manually,但我想知道它是否可以设置为GTEST构建/运行选项(无需对我的代码库进行多行修改)? 最佳答案 没有“完全”记录的选项:--gtest_stack_trace_depth=10(10只是示例值)。必须与--gmock_verbose=info一起使用是的-它适用于失败的EXPECT_CALL-仅在gmock中。对于断言(如ASSERT_EQ),它的意义不大-因为ASSERT就在它所在的位置-它的

c - 即使使用 `noexecstack`,堆栈也是可执行的

我正在努力保护我的应用程序免受缓冲区溢出攻击。除其他事项外,我正在使用不可执行的堆栈并将我的二进制文件与noexecstack标志链接(通过将-Wl,-z,noexecstack传递给gcc)。一切似乎都很好-readelf确认PT_GNU_STACK指定了正确的权限:$readelf-ltarget|grep-A1GNU_STACKGNU_STACK0x00000000000000000x00000000000000000x00000000000000000x00000000000000000x0000000000000000RW10execstack也是如此:$execstack-

c - 即使使用 `noexecstack`,堆栈也是可执行的

我正在努力保护我的应用程序免受缓冲区溢出攻击。除其他事项外,我正在使用不可执行的堆栈并将我的二进制文件与noexecstack标志链接(通过将-Wl,-z,noexecstack传递给gcc)。一切似乎都很好-readelf确认PT_GNU_STACK指定了正确的权限:$readelf-ltarget|grep-A1GNU_STACKGNU_STACK0x00000000000000000x00000000000000000x00000000000000000x00000000000000000x0000000000000000RW10execstack也是如此:$execstack-

c - 从/proc/pid/stat 检索当前堆栈指针

我正在使用gdb执行一个基本的C程序。我在main()的开头有一个断点。运行代码后,gdb按预期在main()处中断。现在,如果我检查堆栈指针寄存器(rsp),我会看到0x7fffffffe170:0x00000000.当我使用cat/proc/17232/stat|检索相同的信息时cut-d""-f29/proc(其中17232是此进程的pid),我看到:140737488347112(whichinhexis:0x7fffffffdfe8).为什么我们从gdb中看到了不同的当前堆栈指针值。而且,为什么gdb将rsp的内容显示为NULL(0x00000000)?谢谢。

c - 从/proc/pid/stat 检索当前堆栈指针

我正在使用gdb执行一个基本的C程序。我在main()的开头有一个断点。运行代码后,gdb按预期在main()处中断。现在,如果我检查堆栈指针寄存器(rsp),我会看到0x7fffffffe170:0x00000000.当我使用cat/proc/17232/stat|检索相同的信息时cut-d""-f29/proc(其中17232是此进程的pid),我看到:140737488347112(whichinhexis:0x7fffffffdfe8).为什么我们从gdb中看到了不同的当前堆栈指针值。而且,为什么gdb将rsp的内容显示为NULL(0x00000000)?谢谢。